﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//大小端字节序和字节序判断
//int main() {
//	int n = 0x11223344;
//	return 0;
//}
//int check_sys(int* num) {
//	if (*(char *)num == 0x44) //小端存储
//	{
//		return 0;
//	}
//	else//大端存储
//	{
//		return 1;
//	}
//
//}
//
////设计⼀个⼩程序来判断当前机器的字节序
//int main() {
//	int n = 0x11223344;
//	int ret = check_sys(&n);
//	if (ret)
//	{
//		printf("大端存储");
//	}
//	else
//	{
//		printf("小端存储");
//	}
//
//	//0x11223344
//	//采用大端存储：11 22 33 44
//	//采用小端存储：44 33 22 11
//	return 0;
//}

////探讨一个错误的写法
//int main() {
//	int n = 0x11223344;
//	char c = (char)n;
//	return 0;
//}


//练习2

//char 到底是有符号的char还是无符号的char是取决于编译器的！
//在VS上char == signed char

//int main()
//{
//    char a = -1;
//    //1000 0000 0000 0000 0000 0000 0000 0001 ——原码
//    //1111 1111 1111 1111 1111 1111 1111 1110 ——反码
//    //1111 1111 1111 1111 1111 1111 1111 1111 ——补码
//    //11111111 - a
//    //1111 1111 1111 1111 1111 1111 1111 1111——整型提升(补码)
//	  //1000 0000 0000 0000 0000 0000 0000 0000——反码
//	  //1000 0000 0000 0000 0000 0000 0000 0001——原码——>-1
//    signed char b = -1;
//    //11111111 - b
//    //1111 1111 1111 1111 1111 1111 1111 1111——整型提升(补码)
//    //1000 0000 0000 0000 0000 0000 0000 0000——反码
//	  //1000 0000 0000 0000 0000 0000 0000 0001——原码——>-1
// 
//    unsigned char c = -1;
//    //11111111 - c
//    //0000 0000 0000 0000 0000 0000 1111 1111——整型提升(补码)
//    printf("a=%d, b=%d, c=%d", a, b, c);
//    //-1 -1 255
//
//    return 0;
//}

//练习3
//3-1
//#include <stdio.h>
//int main()
//{
//	char a = -128;
//	//1000 0000 0000 0000 0000 0000 1000 0000——原码
//	//1111 1111 1111 1111 1111 1111 0111 1111——反码
//	//1111 1111 1111 1111 1111 1111 1000 0000——补码
//	//1000 0000 - a
//	//1111 1111 1111 1111 1111 1111 1000 0000——整型提升
//	printf("%u\n", a);
//	return 0;
//}
//3-2
//#include <stdio.h>
//int main()
//{
//	char a = 128;
//	//0000 0000 0000 0000 0000 0000 1000 0000——原码
//	//1000 0000 - a
//	// 
//	printf("%u\n", a);
//	return 0;
//}


////练习4
#include <stdio.h>

int main()
{
    char a[1000];//0~999
    int i;
    for (i = 0; i < 1000; i++)
    {
        a[i] = -1 - i;
    }
    //数值  -1 -2 -3 -4 ... -127 -128 127 126 ... 4 3 2 1 0 -1 -2 ...
    //下标： 0  1  2  3 ...  126
    printf("%zd", strlen(a));//求得是字符串的长度，统计的是\0(ASCII码值是0)之前的字符个数
    //255 
    return 0;
}